package edu.pod.hoteishilton.model;

import java.io.Serializable;
import java.util.Calendar;
import java.util.GregorianCalendar;

public class Hospedagem implements Serializable {

    private Calendar dataInicioHospedagem;
    private Calendar dataFimHospedagem;
    private Reserva reserva;
    private Quarto quarto;
    private Hospede hospede;
    private Conta conta;

    public Hospedagem(Reserva reserva, Hotel hotel) {
        super();
        this.reserva = reserva;
        this.conta = new Conta();
    }

    public Calendar getDataFimHospedagem() {
        return dataFimHospedagem;
    }

    public void setDataFimHospedagem(Calendar dataFimHospedagem) {
        this.dataFimHospedagem = dataFimHospedagem;
    }

    public Calendar getDataInicioHospedagem() {
        return dataInicioHospedagem;
    }

    public void setDataInicioHospedagem(Calendar dataInicioHospedagem) {
        this.dataInicioHospedagem = dataInicioHospedagem;
    }

    public int getDiasHospedagem() {
        int milissegundos = 1000 * 60 * 60 * 24;
        if (dataFimHospedagem.before(dataInicioHospedagem)) {
            throw new IllegalArgumentException("A data final precisa ser após a data inicial.");
        }
        Calendar startCal = GregorianCalendar.getInstance();
        startCal.setTime(dataInicioHospedagem.getTime());
        startCal.set(Calendar.HOUR_OF_DAY, 12);
        startCal.set(Calendar.MINUTE, 0);
        startCal.set(Calendar.SECOND, 0);
        long startTime = startCal.getTimeInMillis();

        Calendar endCal = GregorianCalendar.getInstance();
        endCal.setTime(dataInicioHospedagem.getTime());
        long endTime = endCal.getTimeInMillis();


        return (int) ((endTime - startTime) / milissegundos) + 1;
    }

    public Hospede getHospede() {
        return hospede;
    }

    public void setHospede(Hospede hospede) {
        this.hospede = hospede;
    }

    public Quarto getQuarto() {
        return quarto;
    }

    public void setQuarto(Quarto quarto) {
        quarto.setHospedagem(this);
        this.quarto = quarto;
    }

    public Reserva getReserva() {
        return reserva;
    }

    public void setReserva(Reserva reserva) {
        this.reserva = reserva;
    }

    public Conta getConta() {
        return conta;
    }

    public void setConta(Conta conta) {
        this.conta = conta;
    }

    public void calcularConta() {
        int nDias = getDiasHospedagem();
//        if(nDias == 0){
//            this.conta.setValor(this.quarto.getPreco());
//        }else{
//            this.conta.setValor(nDias*this.quarto.getPreco());
//        }
        this.conta.setValor(nDias * this.quarto.getPreco());

    }
}